import {
  Entity,
  Column,
  PrimaryGeneratedColumn,
  CreateDateColumn,
  UpdateDateColumn,
} from 'typeorm';
import { ApiHideProperty, ApiProperty } from '@nestjs/swagger';
import { Exclude, Expose, Transform } from 'class-transformer';

// 实体类 映射为数据库里的一张表
@Entity('users')
export class UserEntity {
  // swagger 装饰器 设置字段描述和示例默认值
  @ApiProperty({ description: '用户id', example: 1 })
  @PrimaryGeneratedColumn()
  id: number;

  @ApiProperty({ description: '用户名称', example: 'user_小明' })
  @Column({ length: 50, unique: true })
  username: string;

  @Exclude() //添加Exclude装饰器，表示使用class-transformer转换的时候排除此字段
  @ApiHideProperty() //表示这是一个隐藏字段，不会出现在swagger文档中
  @Column()
  password: string;

  @Transform(({ value }) => {
    //自定义转换逻辑,给mobile字段添加前缀
    return `mobile:${value}`;
  })
  @ApiProperty({ description: '用户手机号', example: '17633636873' })
  @Column({ length: 15, nullable: true })
  mobile: string;

  // 暴露一个不存的字段,向外暴露虚拟属性；数据库上不存在的
  @Expose()
  @ApiProperty({ description: '联系方式', example: '邮箱：17633636873@qq.com' })
  get contact(): string {
    return '邮箱：' + this.email;
  }

  @ApiProperty({ description: '用户邮箱', example: '17633636873@qq.com' })
  @Column({ length: 100, nullable: true })
  email: string;

  @ApiProperty({ description: '启用状态', example: 1 })
  @Column({ default: 1 }) //是否生效 0无效 1有效
  status: number;

  @ApiProperty({ description: '是否超级管理员', example: true })
  @Column({ default: false }) //是否是超级管理员
  is_super: boolean;

  @ApiProperty({ description: '排序编号', example: 1 })
  @Column({ default: 100 }) //排序编号
  sort: number;

  @ApiProperty({ description: '创建时间', example: '2025-02-11 15:17:02' })
  // @Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
  @CreateDateColumn()
  createdAt: Date;

  @ApiProperty({ description: '更新时间', example: '2025-02-11 15:17:02' })
  // @Column({
  //   type: 'timestamp',
  //   default: () => 'CURRENT_TIMESTAMP',
  //   onUpdate: 'CURRENT_TIMESTAMP',
  // })
  @UpdateDateColumn() //提供的日期装饰器，不许哟Column的其他参数
  updatedAt: Date;
}
